package com.t.bricks.bussiness.db.mapper.person;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.t.bricks.bussiness.db.entity.person.Person;
import com.t.bricks.bussiness.db.entity.person.base.PersonBase;

@Mapper
public interface PersonMapper {
	
	/**
	 * 添加
	 * @Param person
	 * @return
	 */
	int add(Person person);

	/**
	 * 删除
	 * @Param sId
	 * @Param iVersion
	 * @return
	 */
	int del(@Param("sId") String sId, @Param("iVersion") Integer iVersion);

	/**
	 * 检查待修改内容是否存在重复数据
	 * @Param personBaseData
	 * @return 重复返回true
	 */
	int checkRepeatByEdit(PersonBase personBase);

	/**
	 * 检查待新增内容是否存在重复数据
	 * @Param personData
	 * @return 重复返回true
	 */
	int checkRepeatByAdd(Person personBase);
	
	/**
	 * 取人员状态
	 * @param sId
	 * @return
	 */
	int getState(@Param("sId") String sId);

	/**
	 * 停用
	 * @param sId
	 * @param sModifieder
	 * @return
	 */
	int stop(@Param("sId") String sId, @Param("sModifieder") String sModifieder);
	
	/**
	 * 启用
	 * @param sId
	 * @param dEndTime
	 * @param sModifieder
	 * @return
	 */
	int start(
		@Param("sId") String sId,
		@Param("dEndTime") Date dEndTime,
		@Param("sModifieder") String sModifieder
	);

	/**
	 * 根据当前部门编号查询所有该部门下的子部门员工(包括该部门)
	 * @param sDeparmentId 部门编号
	 * @param 仅限主部门 部门编号
	 * @return
	 */
	List<Person> findByDepartmentId(
		@Param("sDeparmentId") String sDeparmentId,
		@Param("iMainDeparment") Integer iMainDeparment);
	
	/**
	 * 新增关联的用户信息
	 * @Param person
	 * @return
	 */
	int addUser(Person person);

	/**
	 * 修改关联的用户数据
	 * @Param person
	 * @return
	 */
	int editUser(Person person);
	
	/**
	 * 停用关联用户账号
	 * @param sId
	 * @param sModifieder
	 * @return
	 */
	int stopUser(@Param("sId") String sId, @Param("sModifieder") String sModifieder);
	
	/**
	 * 启用关联用户账号
	 * @param sId
	 * @param sModifieder
	 * @return
	 */
	int startUser(@Param("sId") String sId, @Param("sModifieder") String sModifieder);

	/**
	 * 删除关联用户账号
	 * @Param sId
	 * @return
	 */
	int delUser(@Param("sId") String sId);

	/**
	 * 查找对应编号的关联用户是否存在,存在返回非0值
	 * @Param sId
	 * @return
	 */
	int findCountUser(@Param("sId") String sId);
	
	/**
	 * 根据用户信息添加人员信息
	 * 注意:此为批量操作,用户信息有的记录数,则人员信息一定会有
	 * @return
	 */
	int addByUser();
	
	/**
	 * 根据用户信息删除人员信息
	 * 注意:此为批量操作,用户信息不存在则人员信息一定不存在
	 * @return
	 */
	int delByUser();
	
	/**
	 * 根据用户信息修改人员信息中的部分信息
	 * 注意:此为批量操作,用户信息有的部分数据与人员信息部分数据会一致
	 * @return
	 */
	int editByUser();
	
	/**
	 * 清除所有该人员与部门的关联信息
	 * @Param sId
	 * @return
	 */
	int delDepartment(@Param("sId") String sId);
	
	/**
	 * 删除用户与角色的关联信息
	 * @Param sId
	 * @return
	 */
	int delRole(@Param("sId") String sId);
	
	/**
	 * 删除指定用户所有与权限关联信息
	 * @Param sId
	 * @return
	 */
	int delRight(@Param("sId") String sId);
	
	/**
	 * 查找对应编号的关联用户是否存在,存在返回非0值
	 * @Param sId
	 * @return
	 */
	int findCountDepartment(@Param("sId") String sId);
	
	/**
	 * 查找对应编号的关联用户是否存在,存在返回非0值
	 * @Param sId
	 * @return
	 */
	int findCountRight(@Param("sId") String sId);
	
	/**
	 * 查找对应编号的关联用户是否存在,存在返回非0值
	 * @Param sId
	 * @return
	 */
	int findCountRole(@Param("sId") String sId);
	
}
